#include <iostream>
#include <fstream>
#include <cctype>
#include <string>
using namespace std;
// 统计结构体
struct Stats {
    int chars;    // 字符数
    int words;    // 单词数
    int sentences;// 句子数
};
// 初始化统计数据
void initStats(Stats &s) {
    s.chars = s.words = s.sentences = 0;
}

// 统计基础信息（字符、单词、句子）
void countBasic(ifstream &file, Stats &s) {
    char c;
    bool inWord = false;
    while (file.get(c)) {
        s.chars++;  // 统计所有字符
        
        // 单词判断（字母组成）
        if (isalpha(c)) {
            if (!inWord) {
                s.words++;
                inWord = true;
            }
        } else {
            inWord = false;
        }
        
        // 句子判断（.?!结尾）
        if (c == '.' || c == '!' || c == '?') {
            s.sentences++;
        }
    }
}


int main(int argc, char *argv[]) {
    if (argc != 3) {
        cout << "用法: wc.exe [参数] [文件名]\n";
        cout << "参数:\n";
        cout << "  -c    统计字符数\n  -w    统计单词数\n  -s    统计句子数\n";
        return 1;
    }

    string opt = argv[1];
    ifstream file(argv[2]);
    if (!file) {
        cout << "无法打开文件: " << argv[2] << endl;
        return 1;
    }
    Stats s;
    initStats(s);
    countBasic(file, s);
    // 重置文件指针用于行统计
    file.clear();
    file.seekg(0, ios::beg);
    file.close();
    // 输出结果
    if (opt == "-c") cout <<"字符数: " << s.chars << endl;
    else if (opt == "-w") cout << "\n单词数: " <<s.words << endl;
    else if (opt == "-s") cout << "\n句子数: " << s.sentences << endl;
	else {
        cout << "无效参数: " << opt << endl;
        return 1;
    }

    return 0;
}